package com.ljx.glkt.exception;

import com.ljx.glkt.utils.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author 李捷禧
 * Date: 2023/4/3
 * ClassName: GlobalExceptionHandler
 */

/**
 * 使用到的是aop，面相切面编程
 * 在不修改原来的代码的基础上，增强代码的功能
 * 这个类是统计返回给前端的异常，避免返回太多复杂的错误信息
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 全局异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result error(Exception e){
        System.out.println("全局异常处理");
        e.printStackTrace();
        return Result.fail().message("执行了全局异常处理");
    }

    /**
     * 特定异常处理
     * 比如 ArithmeticException
     * @param e
     * @return
     */
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public Result error(ArithmeticException e){
        System.out.println("特定异常处理");
        e.printStackTrace();
        return Result.fail().message("执行了全局异常处理");
    }

    /**
     * 自定义异常
     * @param e
     * @return
     */
    @ExceptionHandler(GgktException.class)
    @ResponseBody
    public Result error(GgktException e){
        e.printStackTrace();
        return Result.fail().message(e.getMsg()).code(e.getCode());
    }


}